package com.edu.spring.aop.impl;

import com.edu.spring.aop.MathCalculator;
import org.springframework.stereotype.Component;

/**
 * 日志：
 * 1.硬编码：在代码中直接编写日志语句，不推荐，不利于集中管理
 * 2.静态代理：
 * 定义：在不修改原有代码的基础上，通过扩展原有类的功能的方式，进行增强。
 * 代理对象，是目标对象的接口的子类型，代理对象本身不是目标对象，而是将目标对象作为自己的属性。
 * 定义期间就决定好了代理的关系。
 * 缺点：范围小，只能负责部分接口代理功能。
 * 3.动态代理： 运行期间才决定好代理关系
 * 定义：目标对象在执行期间会被动态拦截，插入指定逻辑。
 * 优点：可以代理任何事务
 */
@Component
public class MathCalculatorImpl implements MathCalculator {
    @Override
    public int add(int i, int j) {
        return i + j;
    }

    @Override
    public int sub(int i, int j) {
        return i - j;
    }

    @Override
    public int mul(int i, int j) {
        return i * j;
    }

    @Override
    public int div(int i, int j) {
        return i / j;
    }
}
